/*
 * Controlador.h
 *
 */

#ifndef CONTROLADOR_H_
#define CONTROLADOR_H_

#include <signal.h>
#include <vector>

#include "../Configuracion/Estructuras.h"
#include "../Configuracion/Constantes.h"
#include "../Seniales/SignalHandler.h"
#include "../Configuracion/Utils.h"
#include "../Mensajes/Cola.h"
#include "../Logger/Log.h"

using namespace std;

class Controlador : public EventHandler {

private:

	vector<pid_t> pidAscensores;
	Cola<Llamada> colaAscensor;
	Cola<Llamada> colaPisos;

	void bloquearSeniales();
	void avisarAscensor(int numeroAscensor, Llamada llamada);
	int preguntarAscensor(int pisoPedido);
	int obtenerMetricaAscensor(int pisoPedido, Llamada llamada);

public:

	Controlador( );
	virtual ~Controlador();
	void agregarPidAscensor(pid_t pid, int numeroAscensor);
	int inicializar();
	void recibirLlamadas();
	int handleSignal ( int signum );

};

#endif /* CONTROLADOR_H_ */
